package com.zhen.gulimall.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

// 跨域问题的配置
@Configuration
public class CorsConfig {

    // spring 中默认自带的解决跨域问题的类
    @Bean
    public CorsWebFilter corsWebFilter(){
        // CorsWebFilter 创建需要一个CorsConfigurationSource 接口
        // spring 中也有写好的实现类 UrlBasedCorsConfigurationSource 根据路径解决跨域
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // UrlBasedCorsConfigurationSource 方式解决方法需要 一个registerCorsConfiguration
        CorsConfiguration corsConfiguration = new CorsConfiguration();

        // 通过CorsConfiguration 配置跨域的解决 实例
        corsConfiguration.addAllowedHeader("*"); //允许那些请求头进行跨域 ,*代表所有的请求头！
        corsConfiguration.addAllowedMethod("*"); //允许那些请求方式进行跨域，*代表运行所有的请求方式！
        corsConfiguration.addAllowedOrigin("*"); //允许那些请求来源进行跨域，*代表运行所有的请求来源！
        corsConfiguration.setAllowCredentials(true); //允许请求携带cookie进行跨域

        // 配置所有的请求都需要解决跨域问题
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}
